package chwgigs;

public class J29_BaseClass {

 //<기본 클래스 base class>
 
// 일부 인터페이스가 많은 추상 메서드abcde를 가지고 있는 경우 이것을 구현하는 클래스는 
// 이 모든 메서드abcde를 재정의 해야 한다

// 하지만 실제 사용하는 메서드c라면
// 불필요한 메서드 abce를 재정의 해야만 하는 것은 
// 지루한 작업이 될 수 있다.
	
// 이런 경우 구현클래스(여기선 부모클래스)를 일반 클래스(자녀클래스)로 확장하여 
//재정의 하기를 원하는 메서드만 재정의함

// 이러한 용도로 사용하는 클래스를 
// base class라 한다.
	
// 아래의 예에서는 BadInterface를 구현한 BadClass 를 확장하여 
//	GoodClass1, GoodClass2를 만든다. 
	
	
// 자바 웹 프로그래밍에서 서블릿 클래스를 만들때 Servlet
// 이라는 5개의 추상 메서드를 포함한 인터페이스를 사용한다
//이런 경우 다 사용하지 않음에도 불구하고 
//5개의 추상매서드에 대한 구현 코드를 모두 작성 
//이에 대한 해결책으로 GenericServlet이라는 
//클래스를 확장하면 단 하나의 메서드, 
// 즉, service 메서드만 재정의해서 사용하면 된다 
// 여기서 GeniricServlet은 base class임
	
	public static void main(String[] args) {
		

	}

}//
 
   interface BadInterface{
	   void a();
	   char b();
	   int c();
	   String d();
	   boolean x();
	   
   }
   
   class BadClass implements BadInterface{

	@Override
	public void a() {
		// TODO Auto-generated method stub
		
	}

	@Override
	public char b() {
		// TODO Auto-generated method stub
		return 0;
	}

	@Override
	public int c() {
		// TODO Auto-generated method stub
		return 0;
	}

	@Override
	public String d() {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public boolean x() {
		// TODO Auto-generated method stub
		return false;
	}
 }//
   
   class GoodClass1 extends BadClass{//여기선 BadClass가 부모
	   @Override
	public int c() {
		
		return super.c();
	}
   }
   class GoodClass2 extends BadClass{
	   @Override
	public void a() {
		
		super.a();
	}
	   @Override
	public String d() {
	
		return super.d();
	}
   }
   